<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
// settimeout之后，resolve将返回的hello world传递给then中的data，在then中队data进行打印
//在第一个then执行settimeout之后，右将data和哈哈哈哈哈合并，传递给下一个then的data2
//最重要的一点，then可以写在最外面的最后面，以此来实现链式调用，而不用嵌套调用
// then里面可以传入两个函数，第一个执行resolve，第二个执行reject

//简写：如果resolve不是通过异步请求得到的结果，而是直接传递给下一个then，可以简写 return Promise.resolve(data)
//更可以简写成 return data
        new Promise((resolve, reject) => {
            setTimeout(() => {
                //成功调用then
                resolve('hello world')

                //失败调用catch
                // reject('err msg1')
            }, 2000);
        })
            .then(
                (data) => {
                console.log(data)

                //如果没有settimeout异步请求，可以简写成 return data + '哈哈哈哈'，
                //就不需要再写return new Promise（）
                return new Promise((resolve, reject) => {
                    setTimeout(() => {
                        // resolve(data + '哈哈哈哈')

                        //失败调用catch
                    reject('err msg2')
                    }, 3000);
                })
            }
            )
            .then((data2) => {
                console.log(data2)
            })
            //一旦中间某个链条调用了reject（），会直接调用最后的catch，中断之后的链条
            .catch((err)=>{
                console.log(err)
            })
            







    </script>
</body>

</html>